package com.bbva.gptf.back.dominio;

import java.math.BigDecimal;
import java.util.List;

import org.springframework.roo.addon.dbre.RooDbManaged;
import org.springframework.roo.addon.entity.RooEntity;
import org.springframework.roo.addon.javabean.RooJavaBean;
import org.springframework.roo.addon.tostring.RooToString;
import com.bbva.gptf.back.dominio.Tgpt022DetListaPK;

@RooJavaBean
@RooToString
@RooDbManaged(automaticallyDelete = true)
@RooEntity(identifierType = Tgpt022DetListaPK.class, versionField = "", table = "TGPT022_DET_LISTA", schema = "DBSGPT", finders = {
		"findTgpt022DetalleListasByCdLista", "findTgpt022DetListasByCdLista" })
public class Tgpt022DetLista {

	public static boolean eliminarALLDetalleLista(final BigDecimal cdLista) {
		try {
			final String qlString = "DELETE Tgpt022DetLista DetalleLista WHERE DetalleLista.cdLista.cdLista = :cdLista";
			final int result = entityManager().createQuery(qlString)
					.setParameter("cdLista", cdLista).executeUpdate();
			System.out.println(":::.Filas afectadas: " + result);
			return true;
		} catch (final Exception e) {
			System.out.println(":::. Error en borrado " + e);
			return false;
		}
	}

	public static boolean eliminarALLDetalleLista(List<BigDecimal> cdLista) {
		try {
			final String qlString = "DELETE Tgpt022DetLista DetalleLista WHERE DetalleLista.cdLista.cdLista IN (:cdLista)";
			final int result = entityManager().createQuery(qlString)
					.setParameter("cdLista", cdLista).executeUpdate();
			System.out.println(":::.Filas afectadas: " + result);
			return true;
		} catch (final Exception e) {
			System.out.println(":::. Error en borrado " + e);
			return false;
		}
	}

	public static boolean eliminarALLDetalleLista(BigDecimal cdGrupoDelta,
			List<BigDecimal> clasificaciones) {
		try {
			String contratos = "SELECT contrato.cdContrato FROM Tgpt016Contrato contrato WHERE contrato.cdClasifDelta.cdClasifDelta IN (:clasificaciones)";
			List<BigDecimal> listaContratos = entityManager()
					.createQuery(contratos, BigDecimal.class)
					.setParameter("clasificaciones", clasificaciones)
					.getResultList();			
			String listas = "SELECT DISTINCT detalleLista.cdLista.cdLista FROM Tgpt022DetLista detalleLista WHERE detalleLista.cdLista.cdGpoDelta.cdGrupoDelta = :cdGrupoDelta";
			List<BigDecimal> listaListas = entityManager()
					.createQuery(listas, BigDecimal.class)
					.setParameter("cdGrupoDelta", cdGrupoDelta)
					.getResultList();
			String qlString = "DELETE Tgpt022DetLista detalleLista WHERE detalleLista.id.cdLista IN (:listas) AND "
					+ " detalleLista.id.cdContrato NOT IN (:contratos)";
			final int result = entityManager().createQuery(qlString)
					.setParameter("listas", listaListas)
					.setParameter("contratos", listaContratos).executeUpdate();
			System.out.println(":::.Filas afectadas: " + result);
			return true;
		} catch (final Exception e) {
			System.out.println(":::. Error en borrado " + e);
			return false;
		}
	}
}
